home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 1.iso / ARGONET / PD / FILER / LINKFS.ZIP / !LinkFS / !RunImage (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1998-06-14  |  19KB  |  771 lines

  1.  *******************************************
  2.  **                                       **
  3.  **               !LinkFS                 **
  4.  **     Version 1.13,  14th June 1998     **
  5.  **         (C) Tom Hughes 1993           **
  6.  **                                       **
  7.  *******************************************
  8.  **                                       **
  9.  **        This program is FREEWARE       **
  10.  **   Please see !Help file for details   **
  11.  **                                       **
  12.  *******************************************
  13. error
  14. wimp_poll(%1100000110000,0,0)
  15.  mess%,menu$()
  16. memory(
  17. mess%=
  18. malloc(4)
  19. !mess%=0
  20. wimp_init("LinkFS", "!linkfs", 
  21. , 512, 310, mess%)
  22. free(mess%)
  23. transfer_init
  24. temp_init
  25. temp_readfile("<LinkFS$Dir>.Templates",300)
  26. win_init(1)
  27.  !info%=
  28. win_createfwin("info")
  29. !!save%=
  30. win_createfwin("save")
  31. menu_init(1)
  32. mainmenu%=0
  33.  menu$(2)
  34. %#menu$(0)="Info":menu$(1)="Quit"
  35. menu_makemenu("LinkFS", mainmenu%, menu$(), 1)
  36. menu_subwindow(mainmenu%, 0, info%)
  37. wimp_mainmenu
  38. =mainmenu%
  39. event_mouseclick(block%)
  40.  x%,y%,but%,win%,icon%,select%,menu%,adjust%,either%
  41. /)x%=block%!0:y%=block%!4:but%=block%!8
  42. 00win%=
  43. win_findwin(block%!12):icon%=block%!16
  44. 1/select%=((but% 
  45.  4)=4):menu%=((but% 
  46.  2)=2)
  47. 21adjust%=((but% 
  48.  1)=1):either%=((but% 
  49.  5)>0)
  50.  select% 
  51.  win%=save% 
  52.  icon%=1 
  53. transfer_startdrag(
  54. icon_gettext(save%,0), &FC0, 0, save%, 1)
  55. event_menuselection(block%)
  56.  !block% 
  57. wimp_quit
  58. transfer_willload(type%,dataopen%)
  59.  flags%
  60.  "OS_File",17,
  61. os_getstring(block%+44) 
  62.  flags%
  63. =(flags% 
  64.  dataopen%
  65. transfer_loadfile(file$,type%,safe%)
  66. from$=file$
  67. file$,".")
  68. F!  file$=
  69. file$,
  70. file$,".")+1)
  71. icon_settext(save%, 0, file$)
  72. win_openwin(save%)
  73. transfer_savefile(file$,type%,safe%)
  74.  dummy%,buffer%
  75.  from$=file$ 
  76. OU  dummy%=
  77. wimp_messagebox(
  78. , "Error from LinkFS", "Can't overwrite link target!")
  79. buffer%=
  80. malloc(2+
  81. (from$))
  82. os_putstring(buffer%,from$+".")
  83.  "OS_File",10,file$,&FC0,,buffer%,buffer%+2+
  84. (from$)
  85. free(buffer%)
  86. win_closewin(save%)
  87. error
  88. wimp_error(
  89. $+" (internal error code "+
  90. +")")
  91. wimp_error(
  92. $+" (internal error code "+
  93. +")")
  94. *|update
  95. wimp_poll(M%,T%,P%):
  96.       *** update block ***
  97.  R%,I%,Q%
  98.  T%=0 
  99.  &400C7,M%,_wimp_buffer%,,P% 
  100.  &42 
  101.  Q%:Q%=Q%+T%
  102.  &400E1,M%,_wimp_buffer%,Q%,P% 
  103. :I%=_wimp_buffer%
  104.  2 : 
  105. event_openwindow(I%)
  106.  3 : 
  107. event_closewindow(I%)
  108.  6 : 
  109.  I%!12=-2 
  110.              Q%=I%!8
  111. l5             
  112.  (Q% 
  113. event_iconbarmenu(!I%)
  114.            
  115. n&             
  116. event_mouseclick(I%)
  117.            
  118.  7 : 
  119.  _transfer_dragging% 
  120. q$             
  121. event_savedrag(I%)
  122.            
  123.  8 : 
  124.  "Wimp_ProcessKey",I%!24
  125.  9 : 
  126. event_menuselection(I%):
  127. menu_keepopen
  128.  17,18: 
  129. _transfer_wantmess(I%!16) 
  130. v.                
  131. event_transfermessage(I%)
  132.               
  133. x&                
  134. event_message(I%)
  135.               
  136.  19: 
  137. _transfer_wantack(I%!16) 
  138. {/             
  139. event_transferacknowledge(I%)
  140.            
  141. *|downdate
  142. memory(Y%,S%)
  143.  P%,D%,A%,B%,C%,E%,F%,G%,H%,I%,J%,K%,L%,M%,N%,O%,Q%,R%,T%,U%,V%,Z%,X%,W%
  144.  copyright$,g%,h%,i%,l%,m%,n%,o%
  145. Gcopyright$="Dynamic memory allocation routines, 
  146.  Ian Palmer, 1993"
  147.  _mem_code% 559
  148. 0_mem_error%=Y%:_memdim%=S%:
  149.  &51 
  150.  _mpsize%
  151.  &400EC,-1,-1 
  152.  _mtop%:_mtop%+=&8000
  153.  Z%=0 
  154.  2:P%=_mem_code%:[OPT Z%
  155. !B A%:B B%:B C%:B D%:B R%:B W%
  156. H.A%:ADR R4,_memory%:LDR R1,[R4]:.E%:CMP R1,#0:BEQ F%:LDR R2,[R1,#-4]
  157. LCMP R2,R0:BGE G%:MOV R4,R1:LDR R1,[R1]:B E%:.F%:MOV R0,#0:ADR R1,_memrv%
  158. ESTR R0,[R1]:MOV PC,R14:.G%:LDR R2,[R1]:STR R2,[R4]:ADR R0,_memrv%
  159. STR R1,[R0]:MOV PC,R14
  160. M.B%:LDR R5,[R0,#-4]:ADD R6,R5,R0:ADD R6,R6,#4:ADR R4,_memory%:LDR R1,[R4]
  161. B.H%:CMP R1,#0:BEQ I%:LDR R2,[R1,#-4]:ADD R3,R2,R1:ADD R3,R3,#4
  162. QCMP R3,R0:BEQ J%:CMP R6,R1:BEQ K%:CMP R1,R0:BGT I%:MOV R4,R1:LDR R1,[R1]:B H%
  163. B.I%:STR R0,[R4]:STR R1,[R0]:B L%:.J%:ADD R5,R5,R2:ADD R5,R5,#4
  164. JSTR R5,[R1,#-4]:MOV R0,R1:LDR R1,[R1]:CMP R6,R1:BNE L%:LDR R2,[R1,#-4]
  165. I.K%:ADD R5,R5,R2:ADD R5,R5,#4:STR R5,[R0,#-4]:LDR R1,[R1]:STR R1,[R0]
  166. 9STR R0,[R4]:.L%:ADR R1,_memrv%:STR R0,[R1]:MOV PC,R14
  167. I.C%:ADR R1,_memory%:.M%:LDR R2,[R1]:CMP R2,#0:BEQ N%:CMP R2,R0:BEQ O%
  168. NMOVLT R1,R2:BLT M%:.N%:MOV R1,#0:.O%:ADR R0,_memrv%:STR R1,[R0]:MOV PC,R14
  169. H.R%:ADR R4,_memory%:LDR R2,[R4]:.T%:CMP R2,#0:BEQ U%:LDR R3,[R2,#-4]
  170. JADD R3,R3,R2:CMP R3,R0:BEQ V%:MOV R4,R2:LDR R2,[R2]:B T%:.U%:MOV R2,#0
  171. I.V%:ADR R1,_memrv%:STR R2,[R1]:ADR R1,_memrv2%:STR R4,[R1]:MOV PC,R14
  172. B.W%:ADR R1,_memory%:MOV R0,#0:LDR R2,[R1]:.Y%:CMP R2,#0:BEQ S%
  173. 1LDR R3,[R2,#-4]:ADD R0,R0,R3:LDR R2,[R2]:B Y%
  174. -.S%:ADR R1,_memrv%:STR R0,[R1]:MOV PC,R14
  175. B.D%:STMFD R13!,{R8-R10,R14}:CMP R0,#0:LDMEQFD R13!,{R8-R10,PC}
  176. -CMP R1,R2:LDMEQFD R13!,{R8-R10,PC}:BLT l%
  177. H.g%:SUBS R0,R0,#32:BLT h%:LDMIA R1!,{R3-R10}:STMIA R2!,{R3-R10}:B g%
  178. Q.h%:ADDS R0,R0,#32:.i%:LDMEQFD R13!,{R8-R10,PC}:LDR R4,[R1],#4:STR R4,[R2],#4
  179. SUBS R0,R0,#4:B i%
  180. !.l%:ADD R1,R1,R0:ADD R2,R2,R0
  181. H.m%:SUBS R0,R0,#32:BLT n%:LDMDB R1!,{R3-R10}:STMDB R2!,{R3-R10}:B m%
  182. D.n%:ADDS R0,R0,#32:.o%:LDMEQFD R13!,{R8-R10,PC}:LDR R4,[R1,#-4]!
  183. 'STR R4,[R2,#-4]!:SUBS R0,R0,#4:B o%
  184. ._memory% EQUD 0
  185. ._memrv% EQUD 0
  186. ._memrv2% EQUD 0
  187. _more_memory(S%)
  188.  M%,L%,A%,X%,Y%,Z%:M%=0
  189.  _memdim% 
  190. M  A%=
  191.  _mem_code%+16:L%=!_memrv%:
  192.  L%<>0 
  193.  S%-=!(L%-4)-4:!!_memrv2%=!L%
  194.  S%<(
  195. -2048) 
  196.  M% S%-1:!M%=S%-4:
  197.  L%<>0 
  198.  M%=L%-4:!M%=S%+!(L%-4)
  199. T  A%=_mtop%:
  200.  _mem_code%+16:L%=!_memrv%:
  201.  L%<>0 
  202.  S%-=!(L%-4)-4:!(!_memrv2%)=!L%
  203.  &400EC,-1,-1 
  204.  X%,Y%,Z%:
  205.  S%<Z% 
  206. k    
  207.  &400EC,X%+S%,Y% 
  208.  Z%:M%=X%+&8000:!M%=Z%-X%-4:_mtop%=Z%+&8000:
  209.  L%<>0 
  210.  M%=L%-4:!M%=Z%-X%+!(L%-4)
  211.  M%<>0 
  212.  M%+=4
  213. _less_memory
  214.  A%,B%,L%,C%,S%,N%,D%
  215. A%=_mtop%:
  216.  _mem_code%+16
  217. +B%=!_memrv%:C%=!_memrv2%:B%-=4:L%=4+!B%
  218. ;D%=(L% 
  219.  _mpsize%)*_mpsize%:N%=L%-D%:S%=_mtop%-D%-&8000
  220.  &400EC,S%,-1 
  221.  S%:_mtop%=S%+&8000
  222.  N%>7 
  223.  !B%=N%-4:
  224.  !C%=0
  225. malloc(A%)
  226.  M%,S%
  227. -S%=A%:A%=12+(A% 
  228.  16)*16:
  229.  A%<S% 
  230.  A%+=16
  231.  _mem_code%:M%=!_memrv%
  232.  M%=0 
  233.   M%=
  234. _more_memory(A%+4)
  235.  M%<>0 
  236.  S%=!(M%-4):
  237.  S%-A%>15 
  238.  !(M%-4)=A%:
  239. add_free(M%+A%,S%-A%)
  240.  M%=0 
  241.  _mem_error% 
  242.  11,"Can't allocate memory"
  243. wimp_init(T$,I$,L%,S%,V%,H%)
  244.  B%,C%,X%,Y%,M%:
  245.  S%=0 
  246.  S%=512:
  247.  S%<256 S%=256
  248. S_wimp_task$=T$:_wimp_buffer%=
  249. malloc(S%):B%=
  250. malloc(38+
  251. (I$)):_wimp_iconbar%=B%
  252.  &400C0,V%,&4B534154,T$,H% 
  253.  _wimp_version%,_wimp_handle%
  254.  I$<>"" 
  255.  &400E9,40,,I$ 
  256.  ,,,X%,Y%,,M%
  257.  &35,M%,4 
  258.  ,,C%:X%=X%<<C%
  259.  &35,M%,5 
  260.  ,,C%:Y%=Y%<<C%
  261.   !B%=-2:
  262.  !B%=-1
  263. =  B%!4=0:B%!8=0:B%!12=X%:B%!16=Y%:B%!20=&2102:B%!24=B%+36
  264. C  $(B%+36)=I$:B%!28=1:B%!32=
  265. (I$)+1:
  266.  &400C2,,B% 
  267.  _wimp_icon%
  268. free(A%)
  269.  _mem_code%+4:L%=!_memrv%
  270.  (L%+!(L%-4))=_mtop% 
  271.  (4+!(L%-4))>=_mpsize% 
  272. _less_memory
  273. *|update
  274. transfer_init
  275. _transfer_type%=0
  276. _transfer_file$=""
  277. _transfer_size%=0
  278. _transfer_ref%=0
  279. _transfer_dragging%=
  280. _wimp_buffer%!0=1
  281. _wimp_buffer%!4=2
  282. _wimp_buffer%!8=3
  283. _wimp_buffer%!12=5
  284. _wimp_buffer%!16=6
  285. _wimp_buffer%!20=7
  286. _wimp_buffer%!24=&80142
  287. _wimp_buffer%!28=&80144
  288. _wimp_buffer%!32=&80145
  289. _wimp_buffer%!36=0
  290. wimp_addmessages(_wimp_buffer%)
  291. _transfer_wantmess(mess%)
  292.  mess% 
  293.  1,2,3,5,6,&80144,&80145: =
  294. event_transfermessage(block%)
  295.  buffer%,size%,mess%
  296. ?(block%+!block%)=0
  297.  block%!16 
  298. F    
  299. transfer_willload(block%!40,
  300.  block%!8<>_transfer_ref% 
  301. 1      
  302. os_putstring(block%+44,"<Wimp$Scrap>")
  303.       block%!36=-1
  304.       block%!12=block%!8
  305.       block%!16=2
  306.       !block%=60
  307. 2      
  308.  "Wimp_SendMessage",17,block%,block%!4
  309.             
  310. $    
  311.  block%!12=_transfer_ref% 
  312. #      block%!36=_transfer_size%
  313.       block%!12=block%!8
  314.       block%!16=3
  315. =      
  316.  "Wimp_SendMessage",18,block%,block%!20,block%!24
  317. V      
  318. transfer_savefile(
  319. os_getstring(block%+44),_transfer_type%,(block%!36<>-1))
  320. !      _transfer_ref%=block%!8
  321.       
  322. menu_remove
  323.         
  324. E    
  325.  block%!4<>_wimp_handle% 
  326. transfer_willload(block%!40,
  327.       block%!12=block%!8
  328.       block%!16=4
  329. 2      
  330.  "Wimp_SendMessage",17,block%,block%!4
  331. i      
  332. transfer_loadfile(
  333. os_getstring(block%+44),block%!40,
  334. os_getstring(block%+44)<>"<Wimp$Scrap>")
  335.         
  336. +    
  337. transfer_willload(block%!40,
  338.       block%!12=block%!8
  339.       block%!16=4
  340. 2      
  341.  "Wimp_SendMessage",17,block%,block%!4
  342.  B      
  343. transfer_loadfile(
  344. os_getstring(block%+44),block%!40,
  345. !        
  346.  &80145:
  347.  block%!12 
  348. $        
  349. _transfer_wantack(mess%)
  350.  mess% 
  351.  3,7,&80142: =
  352. event_transferacknowledge(block%)
  353.  dummy%
  354.  block%!16 
  355. 3#    
  356.  block%!8=_transfer_ref% 
  357. 45      
  358. os_getstring(block%+44)="<Wimp$Scrap>" 
  359. 5-        
  360.  "OS_CLI","Remove <Wimp$Scrap>"
  361.       
  362. 7d      dummy%=
  363. wimp_messagebox(
  364. ,"Error from "+_wimp_task$,"Data transfer failed: Receiver died")
  365. 8        
  366. event_savedrag(block%)
  367.  flag%
  368.  _wimp_version%>=300 
  369.  "OS_Byte",161,28 
  370.  ,,flag%
  371.   flag%=((flag% 
  372.  2) = 2)
  373.   flag%=
  374.  flag% 
  375.  "DragASprite_Stop"
  376.  "Wimp_DragBox",,-1
  377. _transfer_dragging%=
  378. _transfer_file$,".")
  379. K?  _transfer_file$=
  380. _transfer_file$,
  381. _transfer_file$,".")+1)
  382.  "Wimp_GetPointerInfo",,_wimp_buffer%
  383. NG_wimp_buffer%!20=_wimp_buffer%!12:_wimp_buffer%!24=_wimp_buffer%!16
  384. OD_wimp_buffer%!28=!_wimp_buffer%:_wimp_buffer%!32=_wimp_buffer%!4
  385. P$_wimp_buffer%!36=_transfer_size%
  386. Q$_wimp_buffer%!40=_transfer_type%
  387. os_putstring(_wimp_buffer%+44,_transfer_file$)
  388. S)_wimp_buffer%!12=0:_wimp_buffer%!16=1
  389. T4!_wimp_buffer%=44+4*((
  390. (_transfer_file$)+4) 
  391.  "Wimp_SendMessage",18,_wimp_buffer%,_wimp_buffer%!20,_wimp_buffer%!24
  392. V"_transfer_ref%=_wimp_buffer%!8
  393. *|downdate
  394. temp_init
  395. _temp_list%=0
  396. _temp_spritearea%=0
  397. _temp_fonts%=
  398. malloc(256)
  399.  I%=0 
  400.  255:_temp_fonts%?I%=0:
  401. temp_readfile(F$,E%)
  402.  C%,A%,D%,N%,T%,F%,Z%,H%,I%
  403.  C%=0 
  404. wimp_error(1,214,"Can't open template file "+F$)
  405.  A%=0 
  406.  15:D%=
  407. :T%=0:Z%=
  408. malloc(E%)
  409.  A%=0 
  410.  23:Z%?A%=
  411.  !Z% 
  412. h+  N%=
  413. malloc(32):!N%=T%:T%=N%:N%!4=Z%!4
  414.  A%=0 
  415.  11:F%=?(Z%+12+A%):
  416.  F%=0 
  417.  ?(Z%+A%+12)=13
  418. :?(Z%+24)=13:$(N%+16)=
  419. tolower($(Z%+12))
  420.  !Z%=0:
  421. D%=T%:A%=Z%
  422. malloc(256)
  423.  &400D9,,F$
  424.  I%=0 
  425.  255:H%?I%=0:
  426.   N%=
  427. malloc(D%!4):D%!8=N%
  428.  &400DB,,N%,A%,A%+E%,H%,$(D%+16),0 
  429.  ,,C%:F%=4+C%-A%
  430. tB  C%=
  431. malloc(F%):D%!12=C%:
  432.  &400DB,,N%,C%,C%+F%,H%,$(D%+16),0
  433.  !D%=0 
  434.  !D%=_temp_list%:_temp_list%=T%:D%=0:
  435.  D%=!D%
  436.  I%=0 
  437. w$    
  438.  H%?I% 
  439.  _temp_fonts%?I%+=1
  440.  _temp_spritearea% 
  441.     N%!64=_temp_spritearea%
  442.     I%=N%!84
  443.  I%>0
  444. }+      
  445.  (!(N%+104+32*I%) 
  446.  &103)=&102 
  447. ~-        !(N%+112+32*I%)=_temp_spritearea%
  448.       
  449.       I%-=1
  450.         
  451.  &400DA:
  452. free(Z%)
  453. free(H%)
  454. win_init(E%)
  455. 4_win_list%=
  456. malloc(4*E%):E%=
  457. size_of(_win_list%)
  458.  A%=0 
  459.  E%-1 
  460.  4:!(_win_list%+A%)=0:
  461. win_createfwin(N$)
  462. win_fakewin(
  463. temp_gettemplate(N$))
  464. win_createwin(D%)
  465. menu_init(N%)
  466. ;menu_tick=1:menu_dotted=2:_wimp_menu%=
  467. malloc((N%+1)*4)
  468. 2_wimp_oldmenu%=0:_wimp_oldmx%=0:_wimp_oldmy%=0
  469. 7!_wimp_menu%=N%:
  470.  A%=1 
  471.  N%:!(_wimp_menu%+4*A%)=0:
  472. menu_makemenu(T$,N%,opts$(),S%)
  473.  XX%,TC%,A%,B%,C%,P%,M%,menu%,M$
  474. #N%+=1:menu%=!(_wimp_menu%+N%*4)
  475.  menu%=0 
  476. ;  menu%=
  477. malloc(32+24*(S%+1)):!(_wimp_menu%+N%*4)=menu%
  478. size_of(menu%)<(32+24*(S%+1)) 
  479. realloc(menu%,32+24*(S%+1)):!(_wimp_menu%+N%*4)=menu%
  480. +$menu%=T$:menu%?
  481. (T$)=0:menu%!12=&70207
  482. 0menu%!16=172:menu%!20=44:menu%!24=0:M%=
  483.  A%=0 
  484.  S%:M$=opts$(A%):B%=0:C%=-1:P%=menu%+28+A%*24:TC%=7:XX%=&21
  485. M$)="@" 
  486.  B%=B% 
  487.  8:M$=
  488. M$):TC%=3:XX%=&400021
  489. M$)="/" 
  490.  B%=B% 
  491.  1:M$=
  492. M$)="_" 
  493.  B%=B% 
  494.  2:M$=
  495.  A%=S% 
  496.  B%=B% 
  497. M$)="<" 
  498. E  B%=B% 
  499.  4:!P%=B%:P%!4=C%:P%!8=(TC% 
  500.  &FF)*&1000000 
  501.  &100 
  502. )  M$=
  503. M$):B%=
  504. M$,">"):C%=
  505. M$,B%+1))
  506. 5  M$=
  507. M$,B%-1):$C%=M$:P%!12=C%:P%!16=-1:P%!20=255
  508. M$)=">" 
  509. 3    !P%=B% 
  510.  16:P%!8=(TC% 
  511.  &FF)*&1000000 
  512. B    M$=
  513. M$):B%=
  514. M$,"<"):C%=
  515. M$,B%+1)):C%=!(_wimp_menu%+4*C%)
  516. (    P%!4=C%:M$=
  517. M$,B%-1):$(P%+12)=M$
  518. 6    !P%=B%:P%!4=C%:P%!8=(TC% 
  519.  &FF)*&1000000 
  520. $    $(P%+12)=M$:?(P%+12+
  521. (M$))=0
  522. (M$) 
  523. :menu%!16=16*(M%+1)
  524. menu_subwindow(M%,N%,S%)
  525.  P%:P%=!(_wimp_menu%+4*(M%+1)):!(P%+32+N%*24)=!(S%-8)
  526. win_findwin(H%)
  527.  E%,A%,F%,P%
  528. size_of(_win_list%):F%=-1:
  529.  A%=0 
  530.  E%-1 
  531.  4:P%=_win_list%!A%
  532.  P%<>0 
  533.  !(P%-8)=H% 
  534.  F%=P%
  535. transfer_startdrag(file$,type%,size%,win%,icon%)
  536.  flag%,xmin%,xmax%,ymin%,ymax%,xsize%,ysize%,sprite$
  537. $!_wimp_buffer%=
  538. win_handle(win%)
  539.  "Wimp_GetWindowInfo",,_wimp_buffer%
  540. 8xmin%=_wimp_buffer%!4+!(_wimp_buffer%+92+32*icon%+0)
  541. 8xmax%=_wimp_buffer%!4+!(_wimp_buffer%+92+32*icon%+8)
  542. [ymin%=_wimp_buffer%!8+!(_wimp_buffer%+92+32*icon%+4)+(_wimp_buffer%!16-_wimp_buffer%!8)
  543. \ymax%=_wimp_buffer%!8+!(_wimp_buffer%+92+32*icon%+12)+(_wimp_buffer%!16-_wimp_buffer%!8)
  544. os_screensize(xsize%,ysize%)
  545.  _wimp_version%>=300 
  546.  "OS_Byte",161,28 
  547.  ,,flag%
  548.   flag%=((flag% 
  549.  2) = 2)
  550.   flag%=
  551.  flag% 
  552.   _wimp_buffer%!0=xmin%
  553.   _wimp_buffer%!4=ymin%
  554.   _wimp_buffer%!8=xmax%
  555.   _wimp_buffer%!12=ymax%
  556. H  sprite$="file_":
  557.  type%<&100 sprite$+="0":
  558.  type%<&10 sprite$+="0"
  559.   sprite$+=
  560. ~(type%)
  561.  "DragASprite_Start",%11000101,1,sprite$,_wimp_buffer%,0
  562.   !_wimp_buffer%=0
  563.   _wimp_buffer%!4=5
  564. 2  _wimp_buffer%!8=xmin%:_wimp_buffer%!12=ymin%
  565. 3  _wimp_buffer%!16=xmax%:_wimp_buffer%!20=ymax%
  566. +  _wimp_buffer%!24=0:_wimp_buffer%!28=0
  567. 5  _wimp_buffer%!32=xsize%:_wimp_buffer%!36=ysize%
  568.  "Wimp_DragBox",,_wimp_buffer%
  569. _transfer_type%=type%
  570. _transfer_file$=file$
  571. _transfer_size%=size%
  572. _transfer_dragging%=
  573. icon_gettext(W%,I%)
  574. F!_wimp_buffer%=!(W%-8):_wimp_buffer%!4=I%:
  575.  &400CE,,_wimp_buffer%
  576.  (_wimp_buffer%!24 
  577.  1)=0 
  578.  (_wimp_buffer%!24 
  579.  256) 
  580. os_getstring(_wimp_buffer%!28)
  581. *|update
  582. wimp_quit:
  583.          *** update block ***
  584.  I%=0 
  585.  _temp_fonts%?I% 
  586.  "Font_LoseFont",I%
  587.  &400DD,_wimp_handle%,&4B534154
  588. *|downdate
  589. os_getstring(P%)
  590.  S$:S$="":
  591.  ?P%>31 S$+=
  592. (?P%):P%+=1:
  593. icon_settext(W%,I%,T$)
  594.  cw%,ci%,cx%,cy%,cp%
  595. F!_wimp_buffer%=!(W%-8):_wimp_buffer%!4=I%:
  596.  &400CE,,_wimp_buffer%
  597.  (_wimp_buffer%!24 
  598.  1)=0 
  599.  (_wimp_buffer%!24 
  600.  256) 
  601. os_putstring(_wimp_buffer%!28,
  602. T$,_wimp_buffer%!36))
  603.  &400D3,,_wimp_buffer%+128
  604. Ecw%=_wimp_buffer%!128:ci%=_wimp_buffer%!132:cx%=_wimp_buffer%!136
  605. /cy%=_wimp_buffer%!140:cp%=_wimp_buffer%!148
  606.  cw%=W%!-8 
  607.  ci%=I% 
  608.  cp% > 
  609. (S$) 
  610.  cp% = 
  611.  &400D2,cw%,ci%,cx%,cy%,-1,cp%
  612. (_wimp_buffer%!8=0:_wimp_buffer%!12=0
  613.  &400CD,,_wimp_buffer%
  614. win_openwin(W%)
  615.  B%:B%=_wimp_buffer%:!B%=!(W%-8)
  616.  &400CB,,B%:
  617.  &400C5,,B%
  618. wimp_messagebox(C%,T$,M$)
  619.  B%,R%,F%:B%=_wimp_buffer%:F%=17:
  620.  F%=19
  621. $!B%=0:$(B%+4)=M$:?(B%+4+
  622. (M$))=0
  623.  &400DF,B%,F%,T$ 
  624. os_putstring(P%,S$)
  625. $P%=S$:?(P%+
  626. (S$))=0
  627. win_closewin(W%)
  628.  3!_wimp_buffer%=!(W%-8):
  629.  &400C6,,_wimp_buffer%
  630. wimp_error(F%,E%,M$)
  631.  B%,R%:B%=_wimp_buffer%
  632. %%!B%=E%:$(B%+4)=M$:?(B%+4+
  633. (M$))=0
  634.  &400DF,B%,1,_wimp_task$
  635. wimp_quit
  636.  &400DF,B%,3,_wimp_task$ 
  637.  R%=2 
  638. wimp_quit
  639. event_openwindow(I%)
  640.  &400C5,,I%
  641. event_closewindow(I%)
  642.  &400C6,,I%
  643. event_iconbarmenu(X%)
  644.  Y%,M%:
  645. wimp_error(1,
  646. $+" at line "+
  647. :MM%=
  648. wimp_mainmenu:Y%=96+
  649. menu_menuheight(M%):X%-=16+(
  650. menu_width(M%) 
  651. menu_popup(M%,X%,Y%)
  652. menu_keepopen
  653.  _wimp_oldmenu%=-1 
  654. A*M%=!(_wimp_menu%+4*(_wimp_oldmenu%+1))
  655.  &400CF,,_wimp_buffer%
  656.  (_wimp_buffer%!8 
  657.  &400D4,,M%,_wimp_oldmx%,_wimp_oldmy%
  658. event_message(B%)
  659.  B%!16 
  660.  0 : 
  661. wimp_quit
  662. add_free(A%,L%)
  663. O:L%=(L% 
  664.  16)*16:
  665.  L%>0 
  666.  !A%=L%-4:A%+=4:
  667.  _mem_code%+4
  668. wimp_addmessages(M%)
  669.  "Wimp_AddMessages",M%
  670. menu_remove
  671.  "Wimp_CreateMenu",,-1
  672. tolower(S$)
  673.  R$,A%,C%,L%:L%=
  674. (S$):R$="":
  675.  L%=0 
  676. A%=1 
  677.  L%:C%=
  678. S$,A%,1)):
  679.  C%>64 
  680.  C%<91 
  681.  C%+=32
  682. (C%):
  683. size_of(P%)
  684. =!(P%-4)
  685. win_fakewin(P%)
  686. d>W%=
  687. malloc(20):!W%=&76C0000:W%!4=0:W%!8=0:W%!12=0:W%!16=P%
  688. =W%+16
  689. temp_gettemplate(N$)
  690.  F%,P%:N$=
  691. tolower(N$)
  692. F%=0:P%=_temp_list%
  693.  $(P%+16)=N$ 
  694.  F%=P%!8
  695.   P%=!P%
  696. win_createwin(D%)
  697.  W%,A%,E%,F%
  698.  !(D%-8)<>0 
  699. wimp_error(1,0,"Trying to create a window that's already there")
  700.  &400C1,,!D% 
  701.  W%:!(D%-8)=W%
  702. tME%=
  703. size_of(_win_list%):F%=-1:
  704.  A%=0 
  705.  E%-1 
  706.  _win_list%!A%=0 
  707.  F%=A%
  708.  F%=-1 
  709. realloc(_win_list%,E%+16):F%=E%:
  710.  A%=E% 
  711.  E%+15 
  712.  4:_win_list%!A%=0:
  713. _win_list%!F%=D%
  714. realloc(
  715.  P%,N%)
  716.  A%,B%,C%
  717.  P%=0 
  718. malloc(N%):
  719. |8C%=!(P%-4):B%=N%:N%=12+(N% 
  720.  16)*16:
  721.  N%<B% 
  722.  N%+=16
  723.  N%<=C% 
  724.  (C%-N%)>15 
  725.  !(P%-4)=N%:
  726. add_free(P%+N%,C%-N%)
  727. L  A%=P%+C%+4:
  728.  _mem_code%+8:B%=!_memrv%:A%=0:
  729.  B%<>0 
  730.  B%=!B%:A%=!(B%-4)
  731.  B%<>0 
  732.  C%+A%+4>=N% 
  733. %    !!_memrv%=!B%:!(P%-4)=C%+A%+4
  734.     A%=C%:C%=
  735. malloc(N%)
  736.  C%<>0 
  737. /      B%=P%:
  738.  _mem_code%+12:
  739. free(P%):P%=C%
  740.         
  741. 6      
  742.  _mem_error% 
  743.  11,"Can't allocate memory"
  744.         
  745. win_handle(W%)
  746. =!(W%-8)
  747. os_screensize(
  748.  F%,P%
  749.  &35,-1,4 
  750.  ,,F%:
  751.  &35,-1,11 
  752.  ,,P%:X%=P%<<F%
  753.  &35,-1,5 
  754.  ,,F%:
  755.  &35,-1,12 
  756.  ,,P%:Y%=P%<<F%
  757. menu_menuheight(N%)
  758.  A%,H%,P%:N%+=1:P%=!(_wimp_menu%+4*N%):H%=0:A%=-1:
  759. :A%+=1
  760. *H%+=44:
  761.  (!(P%+A%*24+28) 
  762.  H%+=22
  763.  (!(P%+A%*24+28) 
  764.  128)
  765. menu_width(N%)
  766.  P%:P%=!(_wimp_menu%+(N%+1)*4)
  767. =P%!16
  768. menu_popup(M%,X%,Y%)
  769. P_wimp_oldmenu%=M%:_wimp_oldmx%=X%:_wimp_oldmy%=Y%:M%=!(_wimp_menu%+4*(M%+1))
  770.  &400D4,,M%,X%,Y%
  771.